﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Proyecto7CAD;
using System.Data;
using System.Collections;

namespace ENProyecto7
{
    public class ENEnemigo
    {
        private int idEnemigo;
        private string nombreEnemigo;
        private int ataqueEnemigo;
        private int vidaEnemigo;
        private int defensaEnemigo;
        private int puntosEnemigo;
        private string imagenEnemigo;
        private EnemigoCAD obj;


        public ENEnemigo()
        {
            idEnemigo = 0;
            nombreEnemigo = "";
            ataqueEnemigo = 0;
            vidaEnemigo = 0;
            defensaEnemigo = 0;
            puntosEnemigo = 0;
            imagenEnemigo = null;
            obj = new EnemigoCAD();
        }

        public ENEnemigo(string nombre, int ataque, int vida, int defensa, int puntos, string imagen = null, int id = 0)
        {
            idEnemigo = id;
            nombreEnemigo = nombre;
            ataqueEnemigo = ataque;
            vidaEnemigo = vida;
            defensaEnemigo = defensa;
            puntosEnemigo = puntos;
            imagenEnemigo = imagen;
            obj = new EnemigoCAD();
        }

        public int IdEnemigo
        {
            get { return idEnemigo; }
            set { idEnemigo = value; }
        }


        public string NombreEnemigo
        {
            get { return nombreEnemigo; }
            set { nombreEnemigo = value; }
        }

        public int AtaqueEnemigo
        {
            get { return ataqueEnemigo; }
            set { ataqueEnemigo = value; }
        }

        public int VidaEnemigo
        {
            get { return vidaEnemigo; }
            set { vidaEnemigo = value; }
        }

        public int DefensaEnemigo
        {
            get { return defensaEnemigo; }
            set { defensaEnemigo = value; }
        }

        public int PuntosEnemigo
        {
            get { return puntosEnemigo; }
            set { puntosEnemigo = value; }
        }

        public string ImagenEnemigo
        {
            get { return imagenEnemigo; }
            set { imagenEnemigo = value; }
        }

        //Métodos de la clase

        //Insertar un nuevo enemigo en la BD
        public void insertarEnemigo()
        {
            try
            {
                obj.insertarEnemigoCAD(nombreEnemigo, ataqueEnemigo, vidaEnemigo, defensaEnemigo, puntosEnemigo, imagenEnemigo);
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }

        //Edicion de un enemigo
        public void editarEnemigo()
        {
            try
            {
                obj.editarEnemigoCAD(idEnemigo, nombreEnemigo, ataqueEnemigo, vidaEnemigo, defensaEnemigo, puntosEnemigo, imagenEnemigo);
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }

        //Borrado de un enemigo
        public void borrarEnemigo()
        {
            try
            {
                obj.borrarEnemigoCAD(idEnemigo);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Obtiene todos los enemigos
        public DataTable obtenerEnemigos()
        {
            try
            {
                return obj.obtenerEnemigos();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Obtiene el objeto que se pide por id
        public void obtenerEnemigo()
        {
            try
            {
                DataTable tabla = obj.obtenerEnemigo(idEnemigo);
                nombreEnemigo = tabla.Rows[0][1].ToString();
                ataqueEnemigo = int.Parse(tabla.Rows[0][2].ToString());
                vidaEnemigo = int.Parse(tabla.Rows[0][3].ToString());
                defensaEnemigo = int.Parse(tabla.Rows[0][4].ToString());
                puntosEnemigo = int.Parse(tabla.Rows[0][5].ToString());
                imagenEnemigo = tabla.Rows[0][6].ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Obtiene el enemigo por nombre y filtra por ataque y vida
        public DataTable obtenerEnemigoNombre(int vidadesde = -1, int vidahasta = -1)
        {
            try
            {
                return obj.obtenerEnemigoNombre(nombreEnemigo, vidadesde, vidahasta);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Obtiene todos los registros de la tabla EnemigoLocalizacion
        public DataSet obtenerEnemigosLocalizacion()
        {
            try
            {
                return obj.obtenerEnemigosLocalizacion();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Obtiene todos los enemigos asociados a la localizacion que se pasa por argumento
        public ArrayList obtenerEnemigoLocalizacion(int idLocalizacion)
        {
            try
            {
                DataSet bdvirtual = obj.obtenerEnemigoLocalizacion(idLocalizacion);
                ArrayList resultados = new ArrayList();

                foreach (DataRow registro in bdvirtual.Tables["enemigolocalizacion"].Rows)
                {
                    ENEnemigosLocalizacion enemigo = new ENEnemigosLocalizacion();

                    enemigo.IDEnemigo = int.Parse(registro[0].ToString());
                    enemigo.Porcentaje = int.Parse(registro[1].ToString());
                    enemigo.Nombre = "";

                    resultados.Add(enemigo);
                }

                foreach (ENEnemigosLocalizacion item in resultados){
                    item.Nombre = obj.obtenerNombreEnemigo(item.IDEnemigo);
                }

                return resultados;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
